﻿using System;
using System.Drawing;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ZedGraph;

namespace ABM_De_Empleados
{
	class Grafico_de_barras_vertical : ZedGraphControl
	{
		/*
		 * Propiedades
		 */

		public BarItem barra
		{
			get;
			set;
		}

		public string nombre_de_la_barra
		{
			get;
			set;
		}

		public System.Drawing.Color color_de_la_barra
		{
			get;
			set;
		}

		public System.Drawing.Color color_del_centro_de_la_barra
		{
			get;
			set;
		}

		public string[] etiquetas	// Representa a los nombres que puede tener las barras.
		{
			get;
			set;
		}

		public int cantidad_de_etiquetas
		{
			get;
			set;
		}

		public double[] puntos_de_datos	// Representa a cada punto de datos en el gráfico.
		{
			get;
			set;
		}

		public int cantidad_de_puntos_de_datos
		{
			get;
			set;
		}

		public RectangleF area
		{
			get;
			set;
		}

		/*
		 * Constructores
		 */

		public Grafico_de_barras_vertical (String titulo)	// Configura los títulos del gráfico, x e y.
		{

			cantidad_de_etiquetas = new int ();
			cantidad_de_etiquetas = 0;

			etiquetas = new string[5];

			cantidad_de_puntos_de_datos = new int ();
			cantidad_de_puntos_de_datos = 0;

			puntos_de_datos = new Double[5];

			color_de_la_barra = new Color ();

			area = new RectangleF ();

			// Le agrega un color de fondo
			GraphPane.Chart.Fill = new Fill (Color.White, Color.FromArgb (255, 255, 166), 90F);
			GraphPane.Fill = new Fill (Color.FromArgb (250, 250, 255));

			// Establece propiedades y luego agrega el control al formulario.
			Location = new System.Drawing.Point (210, 140);
			Name = titulo;
			ScrollGrace = 0D;
			ScrollMaxX = 0D;
			ScrollMaxY = 0D;
			ScrollMaxY2 = 0D;
			ScrollMinX = 0D;
			ScrollMinY = 0D;
			ScrollMinY2 = 0D;
			Size = new System.Drawing.Size (600, 300);
			TabIndex = 4;
			Visible = true;
		}

		/*
		 * Métodos
		 */

		public void limpiar_grafico (String titulo, String titulo_x, String titulo_y)
		{
			// Esto se debe realizar siempre al comienzo de la graficación. Limpia datos de pedidos anteriores.

			cantidad_de_puntos_de_datos = 0;
			cantidad_de_etiquetas = 0;
			//barra.Clear ();

			area = this.GraphPane.Rect;
			this.GraphPane = new GraphPane (area, titulo, titulo_x, titulo_y);
			GraphPane.Chart.Fill = new Fill (Color.White, Color.FromArgb (255, 255, 166), 90F);
			GraphPane.Fill = new Fill (Color.FromArgb (250, 250, 255));
		}

		public void agregar_titulo_al_grafico_de_barras (string titulo_principal, string titulo_x, string titulo_y)
		{
			GraphPane.Title.Text = titulo_principal;
			GraphPane.XAxis.Title.Text = titulo_x;
			GraphPane.YAxis.Title.Text = titulo_y;
		}

		public void modificar_escala_y (int minimo, int maximo)
		{
			GraphPane.YAxis.Scale.Min = minimo;
			GraphPane.YAxis.Scale.Max = maximo;
		}

		public void modificar_tipos_de_ejes (AxisType x, AxisType y)
		{
			GraphPane.XAxis.Type = x;
			GraphPane.YAxis.Type = y;
		}



		public void agregar_barra ()
		{
			/*
			 * Ese método permite agregar una nueva barra al gráfico.
			 */

			barra = GraphPane.AddBar (nombre_de_la_barra, null, puntos_de_datos, color_de_la_barra);
			barra.Bar.Fill = new Fill (color_de_la_barra, color_del_centro_de_la_barra, color_de_la_barra);
		}

		public void modificar_tipo_de_eje_x (AxisType tipo_de_eje)
		{

			/*
			 * Los ejes pueden contener texto, numeros, &c. y por lo tanto este
			 * método modifica ese valor para x.
			 */
			GraphPane.XAxis.Type = tipo_de_eje;
		}

		public void modificar_tipo_de_eje_y (AxisType tipo_de_eje)
		{
			/*
			 * idem que el anterior método.
			 */

			GraphPane.YAxis.Type = tipo_de_eje;
		}

		public void modificar_agrupamientos_de_etiquetas ()
		{
			/*
			 * Cada nombre del empleado aparecerá agrupado entre lineas muy chiquitas en x.
			 */
			GraphPane.XAxis.MajorTic.IsBetweenLabels = true;
		}

		public void agregar_etiqueta (string nombre_de_la_etiqueta)
		{
			/*
			 * Agrega la etiqueta a la colección y luego añade al eje.
			 */

			etiquetas[cantidad_de_etiquetas] = nombre_de_la_etiqueta;
			cantidad_de_etiquetas++;
			GraphPane.XAxis.Scale.TextLabels = etiquetas;
		}

		public void agregar_punto_de_dato (double dato)
		{
			puntos_de_datos[cantidad_de_puntos_de_datos] = dato;
			cantidad_de_puntos_de_datos++;
		}

		public void agregar_nombre_a_la_barra (string nombre)
		{
			nombre_de_la_barra = nombre;
		}

		public void agregar_color_a_la_barra (System.Drawing.Color un_color)
		{
			color_de_la_barra = un_color;
		}

		public void agregar_color_al_centro_de_la_barra (System.Drawing.Color otro_color)
		{
			color_del_centro_de_la_barra = otro_color;
		}

		public void refrescar_grafico ()
		{
			this.AxisChange ();

			this.Refresh ();
		}

	}

}
